package cn.net.Collection;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/**总结1:set集合中的元素都是无序的*/
/**总结2:set集合中的元素不能重复*/
/**总结3:set集合中可以存放null元素,也只允许存放0-1个
 * 用处：去重/降重
 * */
public class TestSet {
    public static void main(String[] args) {
        Set<String> set = new HashSet<String>();

        set.add("太阳");
        set.add("月亮");
        set.add("星星");
        set.add("地球");
        set.add("null");//第二个
        set.add(null);//第一个

        System.out.println(set);

        //3.set集合常用方法
        System.out.println(set.contains("小兔纸"));//false,判断set集合中是否包含指定元素"小兔纸"
        System.out.println(set.equals("星星"));//false,判断set集合对象与指定元素是否相等
        System.out.println(set.hashCode());//1961052313,获取当前set集合对象的哈希码
        System.out.println(set.isEmpty());//false,判断当前集合是否为空
        System.out.println(set.remove("null"));//true成功移除指定元素"null"
        System.out.println(set.remove(null));//true,成功移除指定元素null,所以返回true
        System.out.println(set);//[太阳, 地球, 月亮, 星星]
        System.out.println(set.size());//4,获取当前set集合的元素个数,类似数组长度

        System.out.println(Arrays.toString(set.toArray()));//使用数组工具类查看数组中的元素:[太阳, 地球, 月亮, 星星]

        /**4.集合间的操作**/
        Set<String> set2 = new HashSet();
        set2.add("小老鼠");//给set2集合添加指定元素
        set2.add("小牛犊");//给set2集合添加指定元素
        set2.add("小脑斧");//给set2集合添加指定元素
        set2.add("小兔纸");//给set2集合添加指定元素
        System.out.println(set2);//查看set2集合中的元素

        System.out.println(set.addAll(set2));//true,把集合set2中的元素添加到set集合中,成功返回true
        System.out.println(set);//[小兔纸, 太阳, 小老鼠, 地球, 小牛犊, 月亮, 星星, 小脑斧]
        System.out.println(set.containsAll(set2));//true,判断set集合中是否包含set2集合中的所有元素,如果包含返回true
        System.out.println(set.removeAll(set2));//true,移除set集合中属于set2集合的所有元素
        System.out.println(set);//[太阳, 地球, 月亮, 星星]
       /*
        System.out.println(set.retainAll(set2));//true
        System.out.println(set);//交集为空[]
        System.out.println(set2.retainAll(set));//
        System.out.println(set2);//交集为空[]
        */

        //5.集合的迭代
        Iterator<String> it = set.iterator();//5.1获取集合的迭代器
        while(it.hasNext()) {//5.2判断集合是否有下个元素
            System.out.println(it.next());//获取当前遍历到的元素
        }
        Iterator<String> it2 = set2.iterator();//5.1获取集合的迭代器
        while(it2.hasNext()) {//5.2判断集合是否有下个元素
            String s = it2.next();//5.3如果有,进循环获取当前遍历到的元素
            System.out.println(s);
        }




    }
}
